<?xml version='1.0' encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html lang="en" xml:lang="en" xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <link href="cpip.css" rel="stylesheet" type="text/css" />
    <title>File: /Users/paulross/dev/linux/linux-3.13/include/linux/spinlock_api_smp.h</title>
  </head>
  <body>
    <h1>File: /Users/paulross/dev/linux/linux-3.13/include/linux/spinlock_api_smp.h</h1>
    <p>Green shading in the line number column
means the source is part of the translation unit, red means it is conditionally excluded.
Highlighted line numbers link to the translation unit page. Highlighted macros link to
the macro page.</p>
    <pre><a name="1" /><span class="True">       1:</span> <span class="f">#</span><span class="n">ifndef</span> <a href="cpu.c_macros_ref.html#_X19MSU5VWF9TUElOTE9DS19BUElfU01QX0hfMA__"><span class="b">__LINUX_SPINLOCK_API_SMP_H</span></a>
<a name="2" /><span class="True">       2:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_X19MSU5VWF9TUElOTE9DS19BUElfU01QX0hfMA__"><span class="b">__LINUX_SPINLOCK_API_SMP_H</span></a>
<a name="3" /><span class="True">       3:</span> 
<a name="4" /><span class="False">       4:</span> <span class="f">#</span><span class="n">ifndef</span> <a href="cpu.c_macros_ref.html#_X19MSU5VWF9TUElOTE9DS19IXzA_"><span class="b">__LINUX_SPINLOCK_H</span></a>
<a name="5" /><span class="False">       5:</span> <span class="f">#</span> <span class="n">error</span> <span class="e">&quot;please don&apos;t include this file directly&quot;</span>
<a name="6" /><span class="True">       6:</span> <span class="f">#</span><span class="n">endif</span>
<a name="7" /><span class="True">       7:</span> 
<a name="8" /><span class="True">       8:</span> <span class="k">/*</span>
<a name="9" /><span class="True">       9:</span> <span class="k"> * include/linux/spinlock_api_smp.h</span>
<a name="10" /><span class="True">      10:</span> <span class="k"> *</span>
<a name="11" /><span class="True">      11:</span> <span class="k"> * spinlock API declarations on SMP (and debug)</span>
<a name="12" /><span class="True">      12:</span> <span class="k"> * (implemented in kernel/spinlock.c)</span>
<a name="13" /><span class="True">      13:</span> <span class="k"> *</span>
<a name="14" /><span class="True">      14:</span> <span class="k"> * portions Copyright 2005, Red Hat, Inc., Ingo Molnar</span>
<a name="15" /><span class="True">      15:</span> <span class="k"> * Released under the General Public License (GPL).</span>
<a name="16" /><span class="True">      16:</span> <span class="k"> */</span>
<a name="17" /><span class="True">      17:</span> 
<a name="18" /><span class="True">      18:</span> <span class="m">int</span> <span class="b">in_lock_functions</span><span class="f">(</span><span class="m">unsigned</span> <span class="m">long</span> <span class="b">addr</span><span class="f">)</span><span class="f">;</span>
<a name="19" /><span class="True">      19:</span> 
<a name="20" /><span class="True">      20:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_YXNzZXJ0X3Jhd19zcGluX2xvY2tlZF8w"><span class="b">assert_raw_spin_locked</span></a><span class="f">(</span><span class="b">x</span><span class="f">)</span>    <a href="cpu.c_macros_ref.html#_QlVHX09OXzA_"><span class="b">BUG_ON</span></a><span class="f">(</span><span class="f">!</span><a href="cpu.c_macros_ref.html#_cmF3X3NwaW5faXNfbG9ja2VkXzA_"><span class="b">raw_spin_is_locked</span></a><span class="f">(</span><span class="b">x</span><span class="f">)</span><span class="f">)</span>
<a name="21" /><span class="True">      21:</span> 
<a name="22" /><span class="True">      22:</span> <span class="m">void</span> <a href="cpu.c_macros_ref.html#_X19sb2NrZnVuY18w"><span class="b">__lockfunc</span></a> <span class="b">_raw_spin_lock</span><span class="f">(</span><span class="b">raw_spinlock_t</span> <span class="f">*</span><span class="b">lock</span><span class="f">)</span>        <a href="cpu.c_macros_ref.html#_X19hY3F1aXJlc18w"><span class="b">__acquires</span></a><span class="f">(</span><span class="b">lock</span><span class="f">)</span><span class="f">;</span>
<a name="23" /><span class="True">      23:</span> <span class="m">void</span> <a href="cpu.c_macros_ref.html#_X19sb2NrZnVuY18w"><span class="b">__lockfunc</span></a> <span class="b">_raw_spin_lock_nested</span><span class="f">(</span><span class="b">raw_spinlock_t</span> <span class="f">*</span><span class="b">lock</span><span class="f">,</span> <span class="m">int</span> <span class="b">subclass</span><span class="f">)</span>
<a name="24" /><span class="True">      24:</span>                                 <a href="cpu.c_macros_ref.html#_X19hY3F1aXJlc18w"><span class="b">__acquires</span></a><span class="f">(</span><span class="b">lock</span><span class="f">)</span><span class="f">;</span>
<a name="25" /><span class="True">      25:</span> <span class="m">void</span> <a href="cpu.c_macros_ref.html#_X19sb2NrZnVuY18w"><span class="b">__lockfunc</span></a>
<a name="26" /><span class="True">      26:</span> <span class="b">_raw_spin_lock_nest_lock</span><span class="f">(</span><span class="b">raw_spinlock_t</span> <span class="f">*</span><span class="b">lock</span><span class="f">,</span> <span class="m">struct</span> <span class="b">lockdep_map</span> <span class="f">*</span><span class="b">map</span><span class="f">)</span>
<a name="27" /><span class="True">      27:</span>                                 <a href="cpu.c_macros_ref.html#_X19hY3F1aXJlc18w"><span class="b">__acquires</span></a><span class="f">(</span><span class="b">lock</span><span class="f">)</span><span class="f">;</span>
<a name="28" /><span class="True">      28:</span> <span class="m">void</span> <a href="cpu.c_macros_ref.html#_X19sb2NrZnVuY18w"><span class="b">__lockfunc</span></a> <span class="b">_raw_spin_lock_bh</span><span class="f">(</span><span class="b">raw_spinlock_t</span> <span class="f">*</span><span class="b">lock</span><span class="f">)</span>        <a href="cpu.c_macros_ref.html#_X19hY3F1aXJlc18w"><span class="b">__acquires</span></a><span class="f">(</span><span class="b">lock</span><span class="f">)</span><span class="f">;</span>
<a name="29" /><span class="True">      29:</span> <span class="m">void</span> <a href="cpu.c_macros_ref.html#_X19sb2NrZnVuY18w"><span class="b">__lockfunc</span></a> <span class="b">_raw_spin_lock_irq</span><span class="f">(</span><span class="b">raw_spinlock_t</span> <span class="f">*</span><span class="b">lock</span><span class="f">)</span>
<a name="30" /><span class="True">      30:</span>                                 <a href="cpu.c_macros_ref.html#_X19hY3F1aXJlc18w"><span class="b">__acquires</span></a><span class="f">(</span><span class="b">lock</span><span class="f">)</span><span class="f">;</span>
<a name="31" /><span class="True">      31:</span> 
<a name="32" /><span class="True">      32:</span> <span class="m">unsigned</span> <span class="m">long</span> <a href="cpu.c_macros_ref.html#_X19sb2NrZnVuY18w"><span class="b">__lockfunc</span></a> <span class="b">_raw_spin_lock_irqsave</span><span class="f">(</span><span class="b">raw_spinlock_t</span> <span class="f">*</span><span class="b">lock</span><span class="f">)</span>
<a name="33" /><span class="True">      33:</span>                                 <a href="cpu.c_macros_ref.html#_X19hY3F1aXJlc18w"><span class="b">__acquires</span></a><span class="f">(</span><span class="b">lock</span><span class="f">)</span><span class="f">;</span>
<a name="34" /><span class="True">      34:</span> <span class="m">unsigned</span> <span class="m">long</span> <a href="cpu.c_macros_ref.html#_X19sb2NrZnVuY18w"><span class="b">__lockfunc</span></a>
<a name="35" /><span class="True">      35:</span> <span class="b">_raw_spin_lock_irqsave_nested</span><span class="f">(</span><span class="b">raw_spinlock_t</span> <span class="f">*</span><span class="b">lock</span><span class="f">,</span> <span class="m">int</span> <span class="b">subclass</span><span class="f">)</span>
<a name="36" /><span class="True">      36:</span>                                 <a href="cpu.c_macros_ref.html#_X19hY3F1aXJlc18w"><span class="b">__acquires</span></a><span class="f">(</span><span class="b">lock</span><span class="f">)</span><span class="f">;</span>
<a name="37" /><span class="True">      37:</span> <span class="m">int</span> <a href="cpu.c_macros_ref.html#_X19sb2NrZnVuY18w"><span class="b">__lockfunc</span></a> <span class="b">_raw_spin_trylock</span><span class="f">(</span><span class="b">raw_spinlock_t</span> <span class="f">*</span><span class="b">lock</span><span class="f">)</span><span class="f">;</span>
<a name="38" /><span class="True">      38:</span> <span class="m">int</span> <a href="cpu.c_macros_ref.html#_X19sb2NrZnVuY18w"><span class="b">__lockfunc</span></a> <span class="b">_raw_spin_trylock_bh</span><span class="f">(</span><span class="b">raw_spinlock_t</span> <span class="f">*</span><span class="b">lock</span><span class="f">)</span><span class="f">;</span>
<a name="39" /><span class="True">      39:</span> <span class="m">void</span> <a href="cpu.c_macros_ref.html#_X19sb2NrZnVuY18w"><span class="b">__lockfunc</span></a> <a href="cpu.c_macros_ref.html#_X3Jhd19zcGluX3VubG9ja18w"><span class="b">_raw_spin_unlock</span></a><span class="f">(</span><span class="b">raw_spinlock_t</span> <span class="f">*</span><span class="b">lock</span><span class="f">)</span>        <a href="cpu.c_macros_ref.html#_X19yZWxlYXNlc18w"><span class="b">__releases</span></a><span class="f">(</span><span class="b">lock</span><span class="f">)</span><span class="f">;</span>
<a name="40" /><span class="True">      40:</span> <span class="m">void</span> <a href="cpu.c_macros_ref.html#_X19sb2NrZnVuY18w"><span class="b">__lockfunc</span></a> <span class="b">_raw_spin_unlock_bh</span><span class="f">(</span><span class="b">raw_spinlock_t</span> <span class="f">*</span><span class="b">lock</span><span class="f">)</span>    <a href="cpu.c_macros_ref.html#_X19yZWxlYXNlc18w"><span class="b">__releases</span></a><span class="f">(</span><span class="b">lock</span><span class="f">)</span><span class="f">;</span>
<a name="41" /><span class="True">      41:</span> <span class="m">void</span> <a href="cpu.c_macros_ref.html#_X19sb2NrZnVuY18w"><span class="b">__lockfunc</span></a> <a href="cpu.c_macros_ref.html#_X3Jhd19zcGluX3VubG9ja19pcnFfMA__"><span class="b">_raw_spin_unlock_irq</span></a><span class="f">(</span><span class="b">raw_spinlock_t</span> <span class="f">*</span><span class="b">lock</span><span class="f">)</span>    <a href="cpu.c_macros_ref.html#_X19yZWxlYXNlc18w"><span class="b">__releases</span></a><span class="f">(</span><span class="b">lock</span><span class="f">)</span><span class="f">;</span>
<a name="42" /><span class="True">      42:</span> <span class="m">void</span> <a href="cpu.c_macros_ref.html#_X19sb2NrZnVuY18w"><span class="b">__lockfunc</span></a>
<a name="43" /><span class="True">      43:</span> <span class="b">_raw_spin_unlock_irqrestore</span><span class="f">(</span><span class="b">raw_spinlock_t</span> <span class="f">*</span><span class="b">lock</span><span class="f">,</span> <span class="m">unsigned</span> <span class="m">long</span> <span class="b">flags</span><span class="f">)</span>
<a name="44" /><span class="True">      44:</span>                                 <a href="cpu.c_macros_ref.html#_X19yZWxlYXNlc18w"><span class="b">__releases</span></a><span class="f">(</span><span class="b">lock</span><span class="f">)</span><span class="f">;</span>
<a name="45" /><span class="True">      45:</span> 
<a name="46" /><span class="False">      46:</span> <span class="f">#</span><span class="n">ifdef</span> <span class="b">CONFIG_INLINE_SPIN_LOCK</span>
<a name="47" /><span class="False">      47:</span> <span class="f">#</span><span class="n">define</span> <span class="b">_raw_spin_lock</span><span class="f">(</span><span class="b">lock</span><span class="f">)</span> <span class="b">__raw_spin_lock</span><span class="f">(</span><span class="b">lock</span><span class="f">)</span>
<a name="48" /><span class="True">      48:</span> <span class="f">#</span><span class="n">endif</span>
<a name="49" /><span class="True">      49:</span> 
<a name="50" /><span class="False">      50:</span> <span class="f">#</span><span class="n">ifdef</span> <span class="b">CONFIG_INLINE_SPIN_LOCK_BH</span>
<a name="51" /><span class="False">      51:</span> <span class="f">#</span><span class="n">define</span> <span class="b">_raw_spin_lock_bh</span><span class="f">(</span><span class="b">lock</span><span class="f">)</span> <span class="b">__raw_spin_lock_bh</span><span class="f">(</span><span class="b">lock</span><span class="f">)</span>
<a name="52" /><span class="True">      52:</span> <span class="f">#</span><span class="n">endif</span>
<a name="53" /><span class="True">      53:</span> 
<a name="54" /><span class="False">      54:</span> <span class="f">#</span><span class="n">ifdef</span> <span class="b">CONFIG_INLINE_SPIN_LOCK_IRQ</span>
<a name="55" /><span class="False">      55:</span> <span class="f">#</span><span class="n">define</span> <span class="b">_raw_spin_lock_irq</span><span class="f">(</span><span class="b">lock</span><span class="f">)</span> <span class="b">__raw_spin_lock_irq</span><span class="f">(</span><span class="b">lock</span><span class="f">)</span>
<a name="56" /><span class="True">      56:</span> <span class="f">#</span><span class="n">endif</span>
<a name="57" /><span class="True">      57:</span> 
<a name="58" /><span class="False">      58:</span> <span class="f">#</span><span class="n">ifdef</span> <span class="b">CONFIG_INLINE_SPIN_LOCK_IRQSAVE</span>
<a name="59" /><span class="False">      59:</span> <span class="f">#</span><span class="n">define</span> <span class="b">_raw_spin_lock_irqsave</span><span class="f">(</span><span class="b">lock</span><span class="f">)</span> <span class="b">__raw_spin_lock_irqsave</span><span class="f">(</span><span class="b">lock</span><span class="f">)</span>
<a name="60" /><span class="True">      60:</span> <span class="f">#</span><span class="n">endif</span>
<a name="61" /><span class="True">      61:</span> 
<a name="62" /><span class="False">      62:</span> <span class="f">#</span><span class="n">ifdef</span> <span class="b">CONFIG_INLINE_SPIN_TRYLOCK</span>
<a name="63" /><span class="False">      63:</span> <span class="f">#</span><span class="n">define</span> <span class="b">_raw_spin_trylock</span><span class="f">(</span><span class="b">lock</span><span class="f">)</span> <span class="b">__raw_spin_trylock</span><span class="f">(</span><span class="b">lock</span><span class="f">)</span>
<a name="64" /><span class="True">      64:</span> <span class="f">#</span><span class="n">endif</span>
<a name="65" /><span class="True">      65:</span> 
<a name="66" /><span class="False">      66:</span> <span class="f">#</span><span class="n">ifdef</span> <span class="b">CONFIG_INLINE_SPIN_TRYLOCK_BH</span>
<a name="67" /><span class="False">      67:</span> <span class="f">#</span><span class="n">define</span> <span class="b">_raw_spin_trylock_bh</span><span class="f">(</span><span class="b">lock</span><span class="f">)</span> <span class="b">__raw_spin_trylock_bh</span><span class="f">(</span><span class="b">lock</span><span class="f">)</span>
<a name="68" /><span class="True">      68:</span> <span class="f">#</span><span class="n">endif</span>
<a name="69" /><span class="True">      69:</span> 
<a name="70" /><span class="True">      70:</span> <span class="f">#</span><span class="n">ifndef</span> <span class="b">CONFIG_UNINLINE_SPIN_UNLOCK</span>
<a name="71" /><span class="True">      71:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_X3Jhd19zcGluX3VubG9ja18w"><span class="b">_raw_spin_unlock</span></a><span class="f">(</span><span class="b">lock</span><span class="f">)</span> <span class="b">__raw_spin_unlock</span><span class="f">(</span><span class="b">lock</span><span class="f">)</span>
<a name="72" /><span class="True">      72:</span> <span class="f">#</span><span class="n">endif</span>
<a name="73" /><span class="True">      73:</span> 
<a name="74" /><span class="False">      74:</span> <span class="f">#</span><span class="n">ifdef</span> <span class="b">CONFIG_INLINE_SPIN_UNLOCK_BH</span>
<a name="75" /><span class="False">      75:</span> <span class="f">#</span><span class="n">define</span> <span class="b">_raw_spin_unlock_bh</span><span class="f">(</span><span class="b">lock</span><span class="f">)</span> <span class="b">__raw_spin_unlock_bh</span><span class="f">(</span><span class="b">lock</span><span class="f">)</span>
<a name="76" /><span class="True">      76:</span> <span class="f">#</span><span class="n">endif</span>
<a name="77" /><span class="True">      77:</span> 
<a name="78" /><span class="True">      78:</span> <span class="f">#</span><span class="n">ifdef</span> <a href="cpu.c_macros_ref.html#_Q09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlFfMA__"><span class="b">CONFIG_INLINE_SPIN_UNLOCK_IRQ</span></a>
<a name="79" /><span class="True">      79:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_X3Jhd19zcGluX3VubG9ja19pcnFfMA__"><span class="b">_raw_spin_unlock_irq</span></a><span class="f">(</span><span class="b">lock</span><span class="f">)</span> <span class="b">__raw_spin_unlock_irq</span><span class="f">(</span><span class="b">lock</span><span class="f">)</span>
<a name="80" /><span class="True">      80:</span> <span class="f">#</span><span class="n">endif</span>
<a name="81" /><span class="True">      81:</span> 
<a name="82" /><span class="False">      82:</span> <span class="f">#</span><span class="n">ifdef</span> <span class="b">CONFIG_INLINE_SPIN_UNLOCK_IRQRESTORE</span>
<a name="83" /><span class="False">      83:</span> <span class="f">#</span><span class="n">define</span> <span class="b">_raw_spin_unlock_irqrestore</span><span class="f">(</span><span class="b">lock</span><span class="f">,</span> <span class="b">flags</span><span class="f">)</span> <span class="b">__raw_spin_unlock_irqrestore</span><span class="f">(</span><span class="b">lock</span><span class="f">,</span> <span class="b">flags</span><span class="f">)</span>
<a name="84" /><span class="True">      84:</span> <span class="f">#</span><span class="n">endif</span>
<a name="85" /><span class="True">      85:</span> 
<a name="86" /><span class="True">      86:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">int</span> <span class="b">__raw_spin_trylock</span><span class="f">(</span><span class="b">raw_spinlock_t</span> <span class="f">*</span><span class="b">lock</span><span class="f">)</span>
<a name="87" /><span class="True">      87:</span> <span class="f">{</span>
<a name="88" /><span class="True">      88:</span>     <a href="cpu.c_macros_ref.html#_cHJlZW1wdF9kaXNhYmxlXzA_"><span class="b">preempt_disable</span></a><span class="f">(</span><span class="f">)</span><span class="f">;</span>
<a name="89" /><span class="True">      89:</span>     <span class="m">if</span> <span class="f">(</span><span class="b">do_raw_spin_trylock</span><span class="f">(</span><span class="b">lock</span><span class="f">)</span><span class="f">)</span> <span class="f">{</span>
<a name="90" /><span class="True">      90:</span>         <a href="cpu.c_macros_ref.html#_c3Bpbl9hY3F1aXJlXzA_"><span class="b">spin_acquire</span></a><span class="f">(</span><span class="f">&amp;</span><span class="b">lock</span><span class="f">-&gt;</span><span class="b">dep_map</span><span class="f">,</span> <span class="c">0</span><span class="f">,</span> <span class="c">1</span><span class="f">,</span> <a href="cpu.c_macros_ref.html#_X1JFVF9JUF9fMA__"><span class="b">_RET_IP_</span></a><span class="f">)</span><span class="f">;</span>
<a name="91" /><span class="True">      91:</span>         <span class="m">return</span> <span class="c">1</span><span class="f">;</span>
<a name="92" /><span class="True">      92:</span>     <span class="f">}</span>
<a name="93" /><span class="True">      93:</span>     <a href="cpu.c_macros_ref.html#_cHJlZW1wdF9lbmFibGVfMA__"><span class="b">preempt_enable</span></a><span class="f">(</span><span class="f">)</span><span class="f">;</span>
<a name="94" /><span class="True">      94:</span>     <span class="m">return</span> <span class="c">0</span><span class="f">;</span>
<a name="95" /><span class="True">      95:</span> <span class="f">}</span>
<a name="96" /><span class="True">      96:</span> 
<a name="97" /><span class="True">      97:</span> <span class="k">/*</span>
<a name="98" /><span class="True">      98:</span> <span class="k"> * If lockdep is enabled then we use the non-preemption spin-ops</span>
<a name="99" /><span class="True">      99:</span> <span class="k"> * even on CONFIG_PREEMPT, because lockdep assumes that interrupts are</span>
<a name="100" /><span class="True">     100:</span> <span class="k"> * not re-enabled during lock-acquire (which the preempt-spin-ops do):</span>
<a name="101" /><span class="True">     101:</span> <span class="k"> */</span>
<a name="102" /><span class="True">     102:</span> <span class="f">#</span><span class="n">if</span> <span class="f">!</span><span class="b">defined</span><span class="f">(</span><span class="b">CONFIG_GENERIC_LOCKBREAK</span><span class="f">)</span> <span class="f">||</span> <span class="b">defined</span><span class="f">(</span><span class="b">CONFIG_DEBUG_LOCK_ALLOC</span><span class="f">)</span>
<a name="103" /><span class="True">     103:</span> 
<a name="104" /><span class="True">     104:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">unsigned</span> <span class="m">long</span> <span class="b">__raw_spin_lock_irqsave</span><span class="f">(</span><span class="b">raw_spinlock_t</span> <span class="f">*</span><span class="b">lock</span><span class="f">)</span>
<a name="105" /><span class="True">     105:</span> <span class="f">{</span>
<a name="106" /><span class="True">     106:</span>     <span class="m">unsigned</span> <span class="m">long</span> <span class="b">flags</span><span class="f">;</span>
<a name="107" /><span class="True">     107:</span> 
<a name="108" /><span class="True">     108:</span>     <a href="cpu.c_macros_ref.html#_bG9jYWxfaXJxX3NhdmVfMA__"><span class="b">local_irq_save</span></a><span class="f">(</span><span class="b">flags</span><span class="f">)</span><span class="f">;</span>
<a name="109" /><span class="True">     109:</span>     <a href="cpu.c_macros_ref.html#_cHJlZW1wdF9kaXNhYmxlXzA_"><span class="b">preempt_disable</span></a><span class="f">(</span><span class="f">)</span><span class="f">;</span>
<a name="110" /><span class="True">     110:</span>     <a href="cpu.c_macros_ref.html#_c3Bpbl9hY3F1aXJlXzA_"><span class="b">spin_acquire</span></a><span class="f">(</span><span class="f">&amp;</span><span class="b">lock</span><span class="f">-&gt;</span><span class="b">dep_map</span><span class="f">,</span> <span class="c">0</span><span class="f">,</span> <span class="c">0</span><span class="f">,</span> <a href="cpu.c_macros_ref.html#_X1JFVF9JUF9fMA__"><span class="b">_RET_IP_</span></a><span class="f">)</span><span class="f">;</span>
<a name="111" /><span class="True">     111:</span>     <span class="k">/*</span>
<a name="112" /><span class="True">     112:</span> <span class="k">     * On lockdep we dont want the hand-coded irq-enable of</span>
<a name="113" /><span class="True">     113:</span> <span class="k">     * do_raw_spin_lock_flags() code, because lockdep assumes</span>
<a name="114" /><span class="True">     114:</span> <span class="k">     * that interrupts are not re-enabled during lock-acquire:</span>
<a name="115" /><span class="True">     115:</span> <span class="k">     */</span>
<a name="116" /><span class="False">     116:</span> <span class="f">#</span><span class="n">ifdef</span> <span class="b">CONFIG_LOCKDEP</span>
<a name="117" /><span class="False">     117:</span>     <a href="cpu.c_macros_ref.html#_TE9DS19DT05URU5ERURfMA__"><span class="b">LOCK_CONTENDED</span></a><span class="f">(</span><span class="b">lock</span><span class="f">,</span> <span class="b">do_raw_spin_trylock</span><span class="f">,</span> <span class="b">do_raw_spin_lock</span><span class="f">)</span><span class="f">;</span>
<a name="118" /><span class="True">     118:</span> <span class="f">#</span><span class="n">else</span>
<a name="119" /><span class="True">     119:</span>     <span class="b">do_raw_spin_lock_flags</span><span class="f">(</span><span class="b">lock</span><span class="f">,</span> <span class="f">&amp;</span><span class="b">flags</span><span class="f">)</span><span class="f">;</span>
<a name="120" /><span class="True">     120:</span> <span class="f">#</span><span class="n">endif</span>
<a name="121" /><span class="True">     121:</span>     <span class="m">return</span> <span class="b">flags</span><span class="f">;</span>
<a name="122" /><span class="True">     122:</span> <span class="f">}</span>
<a name="123" /><span class="True">     123:</span> 
<a name="124" /><span class="True">     124:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">void</span> <span class="b">__raw_spin_lock_irq</span><span class="f">(</span><span class="b">raw_spinlock_t</span> <span class="f">*</span><span class="b">lock</span><span class="f">)</span>
<a name="125" /><span class="True">     125:</span> <span class="f">{</span>
<a name="126" /><span class="True">     126:</span>     <a href="cpu.c_macros_ref.html#_bG9jYWxfaXJxX2Rpc2FibGVfMA__"><span class="b">local_irq_disable</span></a><span class="f">(</span><span class="f">)</span><span class="f">;</span>
<a name="127" /><span class="True">     127:</span>     <a href="cpu.c_macros_ref.html#_cHJlZW1wdF9kaXNhYmxlXzA_"><span class="b">preempt_disable</span></a><span class="f">(</span><span class="f">)</span><span class="f">;</span>
<a name="128" /><span class="True">     128:</span>     <a href="cpu.c_macros_ref.html#_c3Bpbl9hY3F1aXJlXzA_"><span class="b">spin_acquire</span></a><span class="f">(</span><span class="f">&amp;</span><span class="b">lock</span><span class="f">-&gt;</span><span class="b">dep_map</span><span class="f">,</span> <span class="c">0</span><span class="f">,</span> <span class="c">0</span><span class="f">,</span> <a href="cpu.c_macros_ref.html#_X1JFVF9JUF9fMA__"><span class="b">_RET_IP_</span></a><span class="f">)</span><span class="f">;</span>
<a name="129" /><span class="True">     129:</span>     <a href="cpu.c_macros_ref.html#_TE9DS19DT05URU5ERURfMA__"><span class="b">LOCK_CONTENDED</span></a><span class="f">(</span><span class="b">lock</span><span class="f">,</span> <span class="b">do_raw_spin_trylock</span><span class="f">,</span> <span class="b">do_raw_spin_lock</span><span class="f">)</span><span class="f">;</span>
<a name="130" /><span class="True">     130:</span> <span class="f">}</span>
<a name="131" /><span class="True">     131:</span> 
<a name="132" /><span class="True">     132:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">void</span> <span class="b">__raw_spin_lock_bh</span><span class="f">(</span><span class="b">raw_spinlock_t</span> <span class="f">*</span><span class="b">lock</span><span class="f">)</span>
<a name="133" /><span class="True">     133:</span> <span class="f">{</span>
<a name="134" /><span class="True">     134:</span>     <span class="b">local_bh_disable</span><span class="f">(</span><span class="f">)</span><span class="f">;</span>
<a name="135" /><span class="True">     135:</span>     <a href="cpu.c_macros_ref.html#_cHJlZW1wdF9kaXNhYmxlXzA_"><span class="b">preempt_disable</span></a><span class="f">(</span><span class="f">)</span><span class="f">;</span>
<a name="136" /><span class="True">     136:</span>     <a href="cpu.c_macros_ref.html#_c3Bpbl9hY3F1aXJlXzA_"><span class="b">spin_acquire</span></a><span class="f">(</span><span class="f">&amp;</span><span class="b">lock</span><span class="f">-&gt;</span><span class="b">dep_map</span><span class="f">,</span> <span class="c">0</span><span class="f">,</span> <span class="c">0</span><span class="f">,</span> <a href="cpu.c_macros_ref.html#_X1JFVF9JUF9fMA__"><span class="b">_RET_IP_</span></a><span class="f">)</span><span class="f">;</span>
<a name="137" /><span class="True">     137:</span>     <a href="cpu.c_macros_ref.html#_TE9DS19DT05URU5ERURfMA__"><span class="b">LOCK_CONTENDED</span></a><span class="f">(</span><span class="b">lock</span><span class="f">,</span> <span class="b">do_raw_spin_trylock</span><span class="f">,</span> <span class="b">do_raw_spin_lock</span><span class="f">)</span><span class="f">;</span>
<a name="138" /><span class="True">     138:</span> <span class="f">}</span>
<a name="139" /><span class="True">     139:</span> 
<a name="140" /><span class="True">     140:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">void</span> <span class="b">__raw_spin_lock</span><span class="f">(</span><span class="b">raw_spinlock_t</span> <span class="f">*</span><span class="b">lock</span><span class="f">)</span>
<a name="141" /><span class="True">     141:</span> <span class="f">{</span>
<a name="142" /><span class="True">     142:</span>     <a href="cpu.c_macros_ref.html#_cHJlZW1wdF9kaXNhYmxlXzA_"><span class="b">preempt_disable</span></a><span class="f">(</span><span class="f">)</span><span class="f">;</span>
<a name="143" /><span class="True">     143:</span>     <a href="cpu.c_macros_ref.html#_c3Bpbl9hY3F1aXJlXzA_"><span class="b">spin_acquire</span></a><span class="f">(</span><span class="f">&amp;</span><span class="b">lock</span><span class="f">-&gt;</span><span class="b">dep_map</span><span class="f">,</span> <span class="c">0</span><span class="f">,</span> <span class="c">0</span><span class="f">,</span> <a href="cpu.c_macros_ref.html#_X1JFVF9JUF9fMA__"><span class="b">_RET_IP_</span></a><span class="f">)</span><span class="f">;</span>
<a name="144" /><span class="True">     144:</span>     <a href="cpu.c_macros_ref.html#_TE9DS19DT05URU5ERURfMA__"><span class="b">LOCK_CONTENDED</span></a><span class="f">(</span><span class="b">lock</span><span class="f">,</span> <span class="b">do_raw_spin_trylock</span><span class="f">,</span> <span class="b">do_raw_spin_lock</span><span class="f">)</span><span class="f">;</span>
<a name="145" /><span class="True">     145:</span> <span class="f">}</span>
<a name="146" /><span class="True">     146:</span> 
<a name="147" /><span class="True">     147:</span> <span class="f">#</span><span class="n">endif</span> <span class="k">/* !CONFIG_GENERIC_LOCKBREAK || CONFIG_DEBUG_LOCK_ALLOC */</span>
<a name="148" /><span class="True">     148:</span> 
<a name="149" /><span class="True">     149:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">void</span> <span class="b">__raw_spin_unlock</span><span class="f">(</span><span class="b">raw_spinlock_t</span> <span class="f">*</span><span class="b">lock</span><span class="f">)</span>
<a name="150" /><span class="True">     150:</span> <span class="f">{</span>
<a name="151" /><span class="True">     151:</span>     <a href="cpu.c_macros_ref.html#_c3Bpbl9yZWxlYXNlXzA_"><span class="b">spin_release</span></a><span class="f">(</span><span class="f">&amp;</span><span class="b">lock</span><span class="f">-&gt;</span><span class="b">dep_map</span><span class="f">,</span> <span class="c">1</span><span class="f">,</span> <a href="cpu.c_macros_ref.html#_X1JFVF9JUF9fMA__"><span class="b">_RET_IP_</span></a><span class="f">)</span><span class="f">;</span>
<a name="152" /><span class="True">     152:</span>     <span class="b">do_raw_spin_unlock</span><span class="f">(</span><span class="b">lock</span><span class="f">)</span><span class="f">;</span>
<a name="153" /><span class="True">     153:</span>     <a href="cpu.c_macros_ref.html#_cHJlZW1wdF9lbmFibGVfMA__"><span class="b">preempt_enable</span></a><span class="f">(</span><span class="f">)</span><span class="f">;</span>
<a name="154" /><span class="True">     154:</span> <span class="f">}</span>
<a name="155" /><span class="True">     155:</span> 
<a name="156" /><span class="True">     156:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">void</span> <span class="b">__raw_spin_unlock_irqrestore</span><span class="f">(</span><span class="b">raw_spinlock_t</span> <span class="f">*</span><span class="b">lock</span><span class="f">,</span>
<a name="157" /><span class="True">     157:</span>                         <span class="m">unsigned</span> <span class="m">long</span> <span class="b">flags</span><span class="f">)</span>
<a name="158" /><span class="True">     158:</span> <span class="f">{</span>
<a name="159" /><span class="True">     159:</span>     <a href="cpu.c_macros_ref.html#_c3Bpbl9yZWxlYXNlXzA_"><span class="b">spin_release</span></a><span class="f">(</span><span class="f">&amp;</span><span class="b">lock</span><span class="f">-&gt;</span><span class="b">dep_map</span><span class="f">,</span> <span class="c">1</span><span class="f">,</span> <a href="cpu.c_macros_ref.html#_X1JFVF9JUF9fMA__"><span class="b">_RET_IP_</span></a><span class="f">)</span><span class="f">;</span>
<a name="160" /><span class="True">     160:</span>     <span class="b">do_raw_spin_unlock</span><span class="f">(</span><span class="b">lock</span><span class="f">)</span><span class="f">;</span>
<a name="161" /><span class="True">     161:</span>     <a href="cpu.c_macros_ref.html#_bG9jYWxfaXJxX3Jlc3RvcmVfMA__"><span class="b">local_irq_restore</span></a><span class="f">(</span><span class="b">flags</span><span class="f">)</span><span class="f">;</span>
<a name="162" /><span class="True">     162:</span>     <a href="cpu.c_macros_ref.html#_cHJlZW1wdF9lbmFibGVfMA__"><span class="b">preempt_enable</span></a><span class="f">(</span><span class="f">)</span><span class="f">;</span>
<a name="163" /><span class="True">     163:</span> <span class="f">}</span>
<a name="164" /><span class="True">     164:</span> 
<a name="165" /><span class="True">     165:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">void</span> <span class="b">__raw_spin_unlock_irq</span><span class="f">(</span><span class="b">raw_spinlock_t</span> <span class="f">*</span><span class="b">lock</span><span class="f">)</span>
<a name="166" /><span class="True">     166:</span> <span class="f">{</span>
<a name="167" /><span class="True">     167:</span>     <a href="cpu.c_macros_ref.html#_c3Bpbl9yZWxlYXNlXzA_"><span class="b">spin_release</span></a><span class="f">(</span><span class="f">&amp;</span><span class="b">lock</span><span class="f">-&gt;</span><span class="b">dep_map</span><span class="f">,</span> <span class="c">1</span><span class="f">,</span> <a href="cpu.c_macros_ref.html#_X1JFVF9JUF9fMA__"><span class="b">_RET_IP_</span></a><span class="f">)</span><span class="f">;</span>
<a name="168" /><span class="True">     168:</span>     <span class="b">do_raw_spin_unlock</span><span class="f">(</span><span class="b">lock</span><span class="f">)</span><span class="f">;</span>
<a name="169" /><span class="True">     169:</span>     <a href="cpu.c_macros_ref.html#_bG9jYWxfaXJxX2VuYWJsZV8w"><span class="b">local_irq_enable</span></a><span class="f">(</span><span class="f">)</span><span class="f">;</span>
<a name="170" /><span class="True">     170:</span>     <a href="cpu.c_macros_ref.html#_cHJlZW1wdF9lbmFibGVfMA__"><span class="b">preempt_enable</span></a><span class="f">(</span><span class="f">)</span><span class="f">;</span>
<a name="171" /><span class="True">     171:</span> <span class="f">}</span>
<a name="172" /><span class="True">     172:</span> 
<a name="173" /><span class="True">     173:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">void</span> <span class="b">__raw_spin_unlock_bh</span><span class="f">(</span><span class="b">raw_spinlock_t</span> <span class="f">*</span><span class="b">lock</span><span class="f">)</span>
<a name="174" /><span class="True">     174:</span> <span class="f">{</span>
<a name="175" /><span class="True">     175:</span>     <a href="cpu.c_macros_ref.html#_c3Bpbl9yZWxlYXNlXzA_"><span class="b">spin_release</span></a><span class="f">(</span><span class="f">&amp;</span><span class="b">lock</span><span class="f">-&gt;</span><span class="b">dep_map</span><span class="f">,</span> <span class="c">1</span><span class="f">,</span> <a href="cpu.c_macros_ref.html#_X1JFVF9JUF9fMA__"><span class="b">_RET_IP_</span></a><span class="f">)</span><span class="f">;</span>
<a name="176" /><span class="True">     176:</span>     <span class="b">do_raw_spin_unlock</span><span class="f">(</span><span class="b">lock</span><span class="f">)</span><span class="f">;</span>
<a name="177" /><span class="True">     177:</span>     <a href="cpu.c_macros_ref.html#_cHJlZW1wdF9lbmFibGVfbm9fcmVzY2hlZF8w"><span class="b">preempt_enable_no_resched</span></a><span class="f">(</span><span class="f">)</span><span class="f">;</span>
<a name="178" /><span class="True">     178:</span>     <span class="b">local_bh_enable_ip</span><span class="f">(</span><span class="f">(</span><span class="m">unsigned</span> <span class="m">long</span><span class="f">)</span><span class="b">__builtin_return_address</span><span class="f">(</span><span class="c">0</span><span class="f">)</span><span class="f">)</span><span class="f">;</span>
<a name="179" /><span class="True">     179:</span> <span class="f">}</span>
<a name="180" /><span class="True">     180:</span> 
<a name="181" /><span class="True">     181:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">int</span> <span class="b">__raw_spin_trylock_bh</span><span class="f">(</span><span class="b">raw_spinlock_t</span> <span class="f">*</span><span class="b">lock</span><span class="f">)</span>
<a name="182" /><span class="True">     182:</span> <span class="f">{</span>
<a name="183" /><span class="True">     183:</span>     <span class="b">local_bh_disable</span><span class="f">(</span><span class="f">)</span><span class="f">;</span>
<a name="184" /><span class="True">     184:</span>     <a href="cpu.c_macros_ref.html#_cHJlZW1wdF9kaXNhYmxlXzA_"><span class="b">preempt_disable</span></a><span class="f">(</span><span class="f">)</span><span class="f">;</span>
<a name="185" /><span class="True">     185:</span>     <span class="m">if</span> <span class="f">(</span><span class="b">do_raw_spin_trylock</span><span class="f">(</span><span class="b">lock</span><span class="f">)</span><span class="f">)</span> <span class="f">{</span>
<a name="186" /><span class="True">     186:</span>         <a href="cpu.c_macros_ref.html#_c3Bpbl9hY3F1aXJlXzA_"><span class="b">spin_acquire</span></a><span class="f">(</span><span class="f">&amp;</span><span class="b">lock</span><span class="f">-&gt;</span><span class="b">dep_map</span><span class="f">,</span> <span class="c">0</span><span class="f">,</span> <span class="c">1</span><span class="f">,</span> <a href="cpu.c_macros_ref.html#_X1JFVF9JUF9fMA__"><span class="b">_RET_IP_</span></a><span class="f">)</span><span class="f">;</span>
<a name="187" /><span class="True">     187:</span>         <span class="m">return</span> <span class="c">1</span><span class="f">;</span>
<a name="188" /><span class="True">     188:</span>     <span class="f">}</span>
<a name="189" /><span class="True">     189:</span>     <a href="cpu.c_macros_ref.html#_cHJlZW1wdF9lbmFibGVfbm9fcmVzY2hlZF8w"><span class="b">preempt_enable_no_resched</span></a><span class="f">(</span><span class="f">)</span><span class="f">;</span>
<a name="190" /><span class="True">     190:</span>     <span class="b">local_bh_enable_ip</span><span class="f">(</span><span class="f">(</span><span class="m">unsigned</span> <span class="m">long</span><span class="f">)</span><span class="b">__builtin_return_address</span><span class="f">(</span><span class="c">0</span><span class="f">)</span><span class="f">)</span><span class="f">;</span>
<a name="191" /><span class="True">     191:</span>     <span class="m">return</span> <span class="c">0</span><span class="f">;</span>
<a name="192" /><span class="True">     192:</span> <span class="f">}</span>
<a name="193" /><span class="True">     193:</span> 
<a name="194" /><span class="True">     194:</span> <span class="f">#</span><span class="n">include</span> <span class="f">&lt;</span><span class="b">linux</span><span class="f">/</span><span class="b">rwlock_api_smp</span><span class="f">.</span><span class="b">h</span><span class="f">&gt;</span>
<a name="195" /><span class="True">     195:</span> 
<a name="196" /><span class="True">     196:</span> <span class="f">#</span><span class="n">endif</span> <span class="k">/* __LINUX_SPINLOCK_API_SMP_H */</span>
<a name="197" /><span class="True">     197:</span> </pre>
  </body>
</html>
